﻿using System;
using System.Linq;
using System.Windows.Forms;
using OwnZTec.LojaDelivery.Data;

namespace OwnZTec.LojaDelivery.UI.WinForms
{
    public partial class FrmPerfis : Form
    {
        #region -- Membros e Construtores -------------------------------------------------------------------------------------------------
        public FrmPerfis()
        {
            InitializeComponent();
            this.ConfigurarFormFilho();
        }

        private void FrmPerfis_Load(object sender, EventArgs e)
        {
            cmdEditar.Enabled = cmdExcluir.Enabled = false;

            AtualizarGrid();

            Contexto.MainForm.Cursor = Cursors.Arrow;
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        #region -- Eventos ----------------------------------------------------------------------------------------------------------------
        private void cmdAdicionar_Click(object sender, EventArgs e)
        {
            var frm = new FrmPerfil()
            {
                Pai = this
            };
            frm.ShowDialog();
        }

        private void cmdExcluir_Click(object sender, EventArgs e)
        {
            var res = Contexto.MainForm.ExibirMensagem("Deseja excluir o perfil selecionado?",
                                                       MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (res == DialogResult.No)
                return;

            var perf = ((tbPerfil)gvPerfis.SelectedRows[0].DataBoundItem);

            if (Contexto.Db.tbUsuarios.Where(p => p.idPerfil == perf.idPerfil).Count() > 0)
            {
                Contexto.MainForm.ExibirMensagem("Não é possível excluir este perfil, pois existem usuários cadastrados com este perfil.",
                                                          MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            Contexto.Db.tbPerfils.DeleteObject(perf);

            Contexto.Db.SaveChanges();

            AtualizarGrid();
        }

        private void cmdEditar_Click(object sender, EventArgs e)
        {
            var frm = new FrmPerfil()
            {
                Perfil = (tbPerfil)gvPerfis.SelectedRows[0].DataBoundItem,
                Edicao = true,
                Pai = this
            };

            frm.ShowDialog();
        }

        private void cmdAtualizar_Click(object sender, EventArgs e)
        {
            AtualizarGrid();
        }

        private void cmdSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void gvPerfis_DoubleClick(object sender, EventArgs e)
        {
            if (gvPerfis.SelectedRows.Count != 1)
                return;

            var frm = new FrmPerfil()
            {
                Perfil = (tbPerfil)gvPerfis.SelectedRows[0].DataBoundItem,
                Edicao = true,
                Pai = this
            };

            frm.ShowDialog();
        }

        private void gvPerfis_SelectionChanged(object sender, EventArgs e)
        {
            if (gvPerfis.SelectedRows.Count == 0)
                cmdEditar.Enabled = cmdExcluir.Enabled = false;
            else if (gvPerfis.SelectedRows.Count == 1)
                cmdEditar.Enabled = cmdExcluir.Enabled = true;
            else
            {
                cmdEditar.Enabled = false;
                cmdExcluir.Enabled = true;
            }
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------

        #region -- Metodos ----------------------------------------------------------------------------------------------------------------
        public void AtualizarGrid()
        {
            Cursor = Cursors.WaitCursor;

            gvPerfis.DataSource = Contexto.Db.tbPerfils.ToList();

            Cursor = Cursors.Arrow;
        }
        #endregion ------------------------------------------------------------------------------------------------------------------------
    }
}
